package com.GZHU.fisco;

import org.fisco.bcos.sdk.abi.FunctionReturnDecoder;
import org.fisco.bcos.sdk.abi.TypeReference;
import org.fisco.bcos.sdk.abi.datatypes.*;
import org.fisco.bcos.sdk.abi.datatypes.generated.Int256;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple1;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple4;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.contract.Contract;
import org.fisco.bcos.sdk.crypto.CryptoSuite;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.eventsub.EventCallback;
import org.fisco.bcos.sdk.model.CryptoType;
import org.fisco.bcos.sdk.model.TransactionReceipt;
import org.fisco.bcos.sdk.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.transaction.model.exception.ContractException;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

@SuppressWarnings("unchecked")
public class Data_upload extends Contract {
    public static final String[] BINARY_ARRAY = {"60806040523480156200001157600080fd5b506110016000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356004b6a6040805190810160405280600c81526020017f6d6f64656c5f7265636f726400000000000000000000000000000000000000008152506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040162000101919062000582565b602060405180830381600087803b1580156200011c57600080fd5b505af115801562000131573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200015791908101906200037c565b506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356004b6a6040805190810160405280600f81526020017f6d6f64656c5f6d61696e5f696e666f00000000000000000000000000000000008152506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040162000205919062000534565b602060405180830381600087803b1580156200022057600080fd5b505af115801562000235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200025b91908101906200037c565b506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356004b6a6040805190810160405280600c81526020017f73746174655f6368616e676500000000000000000000000000000000000000008152506040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401620003099190620004e6565b602060405180830381600087803b1580156200032457600080fd5b505af115801562000339573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200035f91908101906200037c565b506200062c565b6000620003748251620005db565b905092915050565b6000602082840312156200038f57600080fd5b60006200039f8482850162000366565b91505092915050565b6000620003b582620005d0565b808452620003cb816020860160208601620005e5565b620003d6816200061b565b602085010191505092915050565b6000601982527f74696d652c6368616e67655f747970652c6f70657261746f72000000000000006020830152604082019050919050565b6000600882527f6d6f64656c5f69640000000000000000000000000000000000000000000000006020830152604082019050919050565b6000601a82527f70726f64756365725f69642c6d6f64656c5f63617465676f72790000000000006020830152604082019050919050565b6000602382527f70726f64756365725f69642c63657274696665725f69642c766572696679657260208301527f5f696400000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b60006060820190508181036000830152620005028184620003a8565b9050818103602083015262000517816200041b565b905081810360408301526200052c81620003e4565b905092915050565b60006060820190508181036000830152620005508184620003a8565b9050818103602083015262000565816200041b565b905081810360408301526200057a8162000452565b905092915050565b600060608201905081810360008301526200059e8184620003a8565b90508181036020830152620005b3816200041b565b90508181036040830152620005c88162000489565b905092915050565b600081519050919050565b6000819050919050565b60005b8381101562000605578082015181840152602081019050620005e8565b8381111562000615576000848401525b50505050565b6000601f19601f8301169050919050565b613e9d806200063c6000396000f300608060405260043610610078576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631cd47ff71461007d5780632b83d062146100ba57806334da242b146100fa5780633b16868b14610137578063c6e677be14610177578063d67503fa146101b4575b600080fd5b34801561008957600080fd5b506100a4600480360361009f9190810190613528565b6101f4565b6040516100b19190613942565b60405180910390f35b3480156100c657600080fd5b506100e160048036036100dc91908101906134a6565b6108bf565b6040516100f194939291906138e1565b60405180910390f35b34801561010657600080fd5b50610121600480360361011c9190810190613528565b6112ef565b60405161012e9190613942565b60405180910390f35b34801561014357600080fd5b5061015e600480360361015991908101906134a6565b61179e565b60405161016e94939291906138e1565b60405180910390f35b34801561018357600080fd5b5061019e60048036036101999190810190613528565b6121ce565b6040516101ab9190613942565b60405180910390f35b3480156101c057600080fd5b506101db60048036036101d691908101906134a6565b612899565b6040516101eb94939291906138e1565b60405180910390f35b6000806000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040805190810160405280600c81526020017f6d6f64656c5f7265636f726400000000000000000000000000000000000000008152506040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016102a8919061395d565b602060405180830381600087803b1580156102c257600080fd5b505af11580156102d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506102fa9190810190613454565b94508473ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561036057600080fd5b505af1158015610374573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061039891908101906133d9565b93508473ffffffffffffffffffffffffffffffffffffffff1663e8434e398b866040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016103f192919061397f565b602060405180830381600087803b15801561040b57600080fd5b505af115801561041f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506104439190810190613402565b925060008373ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156104ab57600080fd5b505af11580156104bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506104e3919081019061347d565b141515610512577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95506108b2565b8473ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561057657600080fd5b505af115801561058a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506105ae919081019061342b565b91508173ffffffffffffffffffffffffffffffffffffffff1663e942b5168b6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016106059190613c52565b600060405180830381600087803b15801561061f57600080fd5b505af1158015610633573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b5168a6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161068c9190613ca7565b600060405180830381600087803b1580156106a657600080fd5b505af11580156106ba573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b516896040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016107139190613afe565b600060405180830381600087803b15801561072d57600080fd5b505af1158015610741573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b516886040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161079a9190613aa9565b600060405180830381600087803b1580156107b457600080fd5b505af11580156107c8573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff166331afac368b846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016108239291906139af565b602060405180830381600087803b15801561083d57600080fd5b505af1158015610851573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610875919081019061347d565b90507fc57b01fa77f41df77eaab79a0e2623fab2e7ae3e9530d9b1cab225ad65f2b7ce816040516108a69190613942565b60405180910390a18095505b5050505050949350505050565b60608060608060008060006060806060806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040805190810160405280600c81526020017f73746174655f6368616e676500000000000000000000000000000000000000008152506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161097e919061395d565b602060405180830381600087803b15801561099857600080fd5b505af11580156109ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250","6109d09190810190613454565b98508873ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610a3657600080fd5b505af1158015610a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a6e91908101906133d9565b97508873ffffffffffffffffffffffffffffffffffffffff1663e8434e398f8a6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610ac792919061397f565b602060405180830381600087803b158015610ae157600080fd5b505af1158015610af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b199190810190613402565b96508673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610b7f57600080fd5b505af1158015610b93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bb7919081019061347d565b604051908082528060200260200182016040528015610bea57816020015b6060815260200190600190039081610bd55790505b5095508673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610c5157600080fd5b505af1158015610c65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c89919081019061347d565b604051908082528060200260200182016040528015610cbc57816020015b6060815260200190600190039081610ca75790505b5094508673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610d2357600080fd5b505af1158015610d37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d5b919081019061347d565b604051908082528060200260200182016040528015610d8e57816020015b6060815260200190600190039081610d795790505b5093508673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610df557600080fd5b505af1158015610e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e2d919081019061347d565b604051908082528060200260200182016040528015610e6057816020015b6060815260200190600190039081610e4b5790505b509250600091505b8673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610ecc57600080fd5b505af1158015610ee0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f04919081019061347d565b8212156112d3578673ffffffffffffffffffffffffffffffffffffffff1663846719e0836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610f609190613942565b602060405180830381600087803b158015610f7a57600080fd5b505af1158015610f8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fb2919081019061342b565b90508073ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161100790613c32565b600060405180830381600087803b15801561102157600080fd5b505af1158015611035573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061105e91908101906134e7565b868381518110151561106c57fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016110cc90613a34565b600060405180830381600087803b1580156110e657600080fd5b505af11580156110fa573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061112391908101906134e7565b858381518110151561113157fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161119190613bdd565b600060405180830381600087803b1580156111ab57600080fd5b505af11580156111bf573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506111e891908101906134e7565b84838151811015156111f657fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161125690613b33565b600060405180830381600087803b15801561127057600080fd5b505af1158015611284573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506112ad91908101906134e7565b83838151811015156112bb57fe5b90602001906020020181905250816001019150610e68565b858585859c509c509c509c505050505050505050509193509193565b6000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040805190810160405280600c81526020017f73746174655f6368616e676500000000000000000000000000000000000000008152506040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016113a0919061395d565b602060405180830381600087803b1580156113ba57600080fd5b505af11580156113ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113f29190810190613454565b92508273ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561145857600080fd5b505af115801561146c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611490919081019061342b565b91508173ffffffffffffffffffffffffffffffffffffffff1663e942b516896040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016114e79190613c52565b600060405180830381600087803b15801561150157600080fd5b505af1158015611515573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b516886040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161156e9190613a54565b600060405180830381600087803b15801561158857600080fd5b505af115801561159c573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b516876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016115f59190613bfd565b600060405180830381600087803b15801561160f57600080fd5b505af1158015611623573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b516866040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161167c9190613b53565b600060405180830381600087803b15801561169657600080fd5b505af11580156116aa573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff166331afac3689846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016117059291906139af565b602060405180830381600087803b15801561171f57600080fd5b505af1158015611733573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611757919081019061347d565b90507fc57b01fa77f41df77eaab79a0e2623fab2e7ae3e9530d9b1cab225ad65f2b7ce816040516117889190613942565b60405180910390a1809350505050949350505050565b60608060608060008060006060806060806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040805190810160405280600c81526020017f6d6f64656c5f7265636f726400000000000000000000000000000000000000008152506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161185d919061395d565b602060405180830381600087803b15801561187757600080fd5b505af115801561188b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118af9190810190613454565b98508873ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561191557600080fd5b505af1158015611929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061194d91908101906133d9565b97508873ffffffffffffffffffffffffffffffffffffffff1663e8434e398f8a6040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016119a692919061397f565b602060405180830381600087803b1580156119c057600080fd5b505af1","1580156119d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119f89190810190613402565b96508673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611a5e57600080fd5b505af1158015611a72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a96919081019061347d565b604051908082528060200260200182016040528015611ac957816020015b6060815260200190600190039081611ab45790505b5095508673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611b3057600080fd5b505af1158015611b44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611b68919081019061347d565b604051908082528060200260200182016040528015611b9b57816020015b6060815260200190600190039081611b865790505b5094508673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611c0257600080fd5b505af1158015611c16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c3a919081019061347d565b604051908082528060200260200182016040528015611c6d57816020015b6060815260200190600190039081611c585790505b5093508673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611cd457600080fd5b505af1158015611ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611d0c919081019061347d565b604051908082528060200260200182016040528015611d3f57816020015b6060815260200190600190039081611d2a5790505b509250600091505b8673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611dab57600080fd5b505af1158015611dbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611de3919081019061347d565b8212156121b2578673ffffffffffffffffffffffffffffffffffffffff1663846719e0836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611e3f9190613942565b602060405180830381600087803b158015611e5957600080fd5b505af1158015611e6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e91919081019061342b565b90508073ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611ee690613c32565b600060405180830381600087803b158015611f0057600080fd5b505af1158015611f14573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250611f3d91908101906134e7565b8683815181101515611f4b57fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611fab90613c87565b600060405180830381600087803b158015611fc557600080fd5b505af1158015611fd9573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061200291908101906134e7565b858381518110151561201057fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161207090613ade565b600060405180830381600087803b15801561208a57600080fd5b505af115801561209e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506120c791908101906134e7565b84838151811015156120d557fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161213590613a89565b600060405180830381600087803b15801561214f57600080fd5b505af1158015612163573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061218c91908101906134e7565b838381518110151561219a57fe5b90602001906020020181905250816001019150611d47565b858585859c509c509c509c505050505050505050509193509193565b6000806000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040805190810160405280600f81526020017f6d6f64656c5f6d61696e5f696e666f00000000000000000000000000000000008152506040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612282919061395d565b602060405180830381600087803b15801561229c57600080fd5b505af11580156122b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122d49190810190613454565b94508473ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561233a57600080fd5b505af115801561234e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061237291908101906133d9565b93508473ffffffffffffffffffffffffffffffffffffffff1663e8434e398b866040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016123cb92919061397f565b602060405180830381600087803b1580156123e557600080fd5b505af11580156123f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061241d9190810190613402565b925060008373ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561248557600080fd5b505af1158015612499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124bd919081019061347d565b1415156124ec577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff955061288c565b8473ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561255057600080fd5b505af1158015612564573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612588919081019061342b565b91508173ffffffffffffffffffffffffffffffffffffffff1663e942b5168b6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016125df9190613c52565b600060405180830381600087803b1580156125f957600080fd5b505af115801561260d573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b5168a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016126669190613ca7565b600060405180830381600087803b15801561268057600080fd5b505af1158015612694573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b516896040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016126ed91906139ff565b600060405180830381600087803b15801561270757600080fd5b505af115801561271b573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b516886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016127749190613ba8565b600060405180830381600087803b15801561278e57600080fd5b505af11580156127a2573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff166331afac368b846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016127fd9291906139af565b602060405180830381600087803b15801561281757600080fd5b505af115801561282b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061284f919081019061347d565b90507fc57b01fa77f41df77eaab79a0e2623fab2e7ae3e9530d9b1cab225ad65f2b7ce816040516128809190613942565b60405180910390a18095505b5050505050949350505050565b60608060608060008060006060806060806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040805190810160405280600f81526020017f6d6f64656c5f6d61696e5f696e666f00000000000000000000000000000000008152506040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612958919061395d565b602060405180830381600087803b15801561297257600080fd5b505af1158015612986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506129aa9190810190613454565b98508873ffffffffffffffffffffffffffffffffffffffff16","637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612a1057600080fd5b505af1158015612a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a4891908101906133d9565b97508873ffffffffffffffffffffffffffffffffffffffff1663e8434e398f8a6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612aa192919061397f565b602060405180830381600087803b158015612abb57600080fd5b505af1158015612acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612af39190810190613402565b96508673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612b5957600080fd5b505af1158015612b6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b91919081019061347d565b604051908082528060200260200182016040528015612bc457816020015b6060815260200190600190039081612baf5790505b5095508673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612c2b57600080fd5b505af1158015612c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c63919081019061347d565b604051908082528060200260200182016040528015612c9657816020015b6060815260200190600190039081612c815790505b5094508673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612cfd57600080fd5b505af1158015612d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d35919081019061347d565b604051908082528060200260200182016040528015612d6857816020015b6060815260200190600190039081612d535790505b5093508673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612dcf57600080fd5b505af1158015612de3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612e07919081019061347d565b604051908082528060200260200182016040528015612e3a57816020015b6060815260200190600190039081612e255790505b509250600091505b8673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612ea657600080fd5b505af1158015612eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ede919081019061347d565b8212156132ad578673ffffffffffffffffffffffffffffffffffffffff1663846719e0836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612f3a9190613942565b602060405180830381600087803b158015612f5457600080fd5b505af1158015612f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f8c919081019061342b565b90508073ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612fe190613c32565b600060405180830381600087803b158015612ffb57600080fd5b505af115801561300f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061303891908101906134e7565b868381518110151561304657fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016130a690613c87565b600060405180830381600087803b1580156130c057600080fd5b505af11580156130d4573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506130fd91908101906134e7565b858381518110151561310b57fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161316b906139df565b600060405180830381600087803b15801561318557600080fd5b505af1158015613199573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506131c291908101906134e7565b84838151811015156131d057fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161323090613b88565b600060405180830381600087803b15801561324a57600080fd5b505af115801561325e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061328791908101906134e7565b838381518110151561329557fe5b90602001906020020181905250816001019150612e42565b858585859c509c509c509c505050505050505050509193509193565b60006132d58251613d9a565b905092915050565b60006132e98251613dac565b905092915050565b60006132fd8251613dbe565b905092915050565b60006133118251613dd0565b905092915050565b60006133258251613de2565b905092915050565b600082601f830112151561334057600080fd5b813561335361334e82613d09565b613cdc565b9150808252602083016020830185838301111561336f57600080fd5b61337a838284613e10565b50505092915050565b600082601f830112151561339657600080fd5b81516133a96133a482613d09565b613cdc565b915080825260208301602083018583830111156133c557600080fd5b6133d0838284613e1f565b50505092915050565b6000602082840312156133eb57600080fd5b60006133f9848285016132c9565b91505092915050565b60006020828403121561341457600080fd5b6000613422848285016132dd565b91505092915050565b60006020828403121561343d57600080fd5b600061344b848285016132f1565b91505092915050565b60006020828403121561346657600080fd5b600061347484828501613305565b91505092915050565b60006020828403121561348f57600080fd5b600061349d84828501613319565b91505092915050565b6000602082840312156134b857600080fd5b600082013567ffffffffffffffff8111156134d257600080fd5b6134de8482850161332d565b91505092915050565b6000602082840312156134f957600080fd5b600082015167ffffffffffffffff81111561351357600080fd5b61351f84828501613383565b91505092915050565b6000806000806080858703121561353e57600080fd5b600085013567ffffffffffffffff81111561355857600080fd5b6135648782880161332d565b945050602085013567ffffffffffffffff81111561358157600080fd5b61358d8782880161332d565b935050604085013567ffffffffffffffff8111156135aa57600080fd5b6135b68782880161332d565b925050606085013567ffffffffffffffff8111156135d357600080fd5b6135df8782880161332d565b91505092959194509250565b60006135f682613d42565b8084526020840193508360208202850161360f85613d35565b60005b8481101561364857838303885261362a8383516136bc565b925061363582613d63565b9150602088019750600181019050613612565b508196508694505050505092915050565b61366281613dec565b82525050565b61367181613dfe565b82525050565b61368081613d90565b82525050565b600061369182613d58565b8084526136a5816020860160208601613e1f565b6136ae81613e52565b602085010191505092915050565b60006136c782613d4d565b8084526136db816020860160208601613e1f565b6136e481613e52565b602085010191505092915050565b6000600e82527f6d6f64656c5f63617465676f72790000000000000000000000000000000000006020830152604082019050919050565b6000600482527f74696d65000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600b82527f76657269667965725f69640000000000000000000000000000000000000000006020830152604082019050919050565b6000600b82527f63657274696665725f69640000000000000000000000000000000000000000006020830152604082019050919050565b6000600882527f6f70657261746f720000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600482527f6e6f7465000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600b82527f6368616e67655f747970650000000000000000000000000000000000000000006020830152604082019050919050565b6000600882527f6d6f64656c5f69640000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600b82527f70726f64756365725f69640000000000000000000000000000000000000000006020830152604082019050919050565b600060808201905081810360008301526138fb81876135eb565b9050818103602083015261390f81866135eb565b9050818103604083015261392381856135eb565b9050818103606083015261393781846135eb565b905095945050505050565b60006020820190506139576000830184613677565b92915050565b6000602082019050818103600083015261397781846136bc565b905092915050565b600060408201905081810360008301526139998185613686565b90506139a86020830184613659565b9392505050565b600060408201905081810360008301526139c981","85613686565b90506139d86020830184613668565b9392505050565b600060208201905081810360008301526139f8816136f2565b9050919050565b60006040820190508181036000830152613a18816136f2565b90508181036020830152613a2c8184613686565b905092915050565b60006020820190508181036000830152613a4d81613729565b9050919050565b60006040820190508181036000830152613a6d81613729565b90508181036020830152613a818184613686565b905092915050565b60006020820190508181036000830152613aa281613760565b9050919050565b60006040820190508181036000830152613ac281613760565b90508181036020830152613ad68184613686565b905092915050565b60006020820190508181036000830152613af781613797565b9050919050565b60006040820190508181036000830152613b1781613797565b90508181036020830152613b2b8184613686565b905092915050565b60006020820190508181036000830152613b4c816137ce565b9050919050565b60006040820190508181036000830152613b6c816137ce565b90508181036020830152613b808184613686565b905092915050565b60006020820190508181036000830152613ba181613805565b9050919050565b60006040820190508181036000830152613bc181613805565b90508181036020830152613bd58184613686565b905092915050565b60006020820190508181036000830152613bf68161383c565b9050919050565b60006040820190508181036000830152613c168161383c565b90508181036020830152613c2a8184613686565b905092915050565b60006020820190508181036000830152613c4b81613873565b9050919050565b60006040820190508181036000830152613c6b81613873565b90508181036020830152613c7f8184613686565b905092915050565b60006020820190508181036000830152613ca0816138aa565b9050919050565b60006040820190508181036000830152613cc0816138aa565b90508181036020830152613cd48184613686565b905092915050565b6000604051905081810181811067ffffffffffffffff82111715613cff57600080fd5b8060405250919050565b600067ffffffffffffffff821115613d2057600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613da582613d70565b9050919050565b6000613db782613d70565b9050919050565b6000613dc982613d70565b9050919050565b6000613ddb82613d70565b9050919050565b6000819050919050565b6000613df782613d70565b9050919050565b6000613e0982613d70565b9050919050565b82818337600083830152505050565b60005b83811015613e3d578082015181840152602081019050613e22565b83811115613e4c576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a7230582093527228e018005ddbb36e49e31496f2936eedfe3c2f75cd4956f5423e828e4d6c6578706572696d656e74616cf50037"};

    public static final String BINARY = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", BINARY_ARRAY);

    public static final String[] SM_BINARY_ARRAY = {"60806040523480156200001157600080fd5b506110016000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c92a78016040805190810160405280600c81526020017f6d6f64656c5f7265636f726400000000000000000000000000000000000000008152506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040162000101919062000534565b602060405180830381600087803b1580156200011c57600080fd5b505af115801562000131573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200015791908101906200037c565b506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c92a78016040805190810160405280600f81526020017f6d6f64656c5f6d61696e5f696e666f00000000000000000000000000000000008152506040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401620002059190620004e6565b602060405180830381600087803b1580156200022057600080fd5b505af115801562000235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200025b91908101906200037c565b506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c92a78016040805190810160405280600c81526020017f73746174655f6368616e676500000000000000000000000000000000000000008152506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040162000309919062000582565b602060405180830381600087803b1580156200032457600080fd5b505af115801562000339573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200035f91908101906200037c565b506200062c565b6000620003748251620005db565b905092915050565b6000602082840312156200038f57600080fd5b60006200039f8482850162000366565b91505092915050565b6000620003b582620005d0565b808452620003cb816020860160208601620005e5565b620003d6816200061b565b602085010191505092915050565b6000601a82527f70726f64756365725f69642c6d6f64656c5f63617465676f72790000000000006020830152604082019050919050565b6000602382527f70726f64756365725f69642c63657274696665725f69642c766572696679657260208301527f5f696400000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000601982527f74696d652c6368616e67655f747970652c6f70657261746f72000000000000006020830152604082019050919050565b6000600882527f6d6f64656c5f69640000000000000000000000000000000000000000000000006020830152604082019050919050565b60006060820190508181036000830152620005028184620003a8565b905081810360208301526200051781620004af565b905081810360408301526200052c81620003e4565b905092915050565b60006060820190508181036000830152620005508184620003a8565b905081810360208301526200056581620004af565b905081810360408301526200057a816200041b565b905092915050565b600060608201905081810360008301526200059e8184620003a8565b90508181036020830152620005b381620004af565b90508181036040830152620005c88162000478565b905092915050565b600081519050919050565b6000819050919050565b60005b8381101562000605578082015181840152602081019050620005e8565b8381111562000615576000848401525b50505050565b6000601f19601f8301169050919050565b613e9d806200063c6000396000f300608060405260043610610078576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632c5bb6d51461007d57806337d6e438146100ba57806341581b76146100f75780635fae54df14610137578063a0cbefb314610174578063d9200378146101b4575b600080fd5b34801561008957600080fd5b506100a4600480360361009f9190810190613528565b6101f4565b6040516100b19190613942565b60405180910390f35b3480156100c657600080fd5b506100e160048036036100dc9190810190613528565b6106a3565b6040516100ee9190613942565b60405180910390f35b34801561010357600080fd5b5061011e600480360361011991908101906134a6565b610d6e565b60405161012e94939291906138e1565b60405180910390f35b34801561014357600080fd5b5061015e60048036036101599190810190613528565b61179e565b60405161016b9190613942565b60405180910390f35b34801561018057600080fd5b5061019b600480360361019691908101906134a6565b611e69565b6040516101ab94939291906138e1565b60405180910390f35b3480156101c057600080fd5b506101db60048036036101d691908101906134a6565b612899565b6040516101eb94939291906138e1565b60405180910390f35b6000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359a48b656040805190810160405280600c81526020017f73746174655f6368616e676500000000000000000000000000000000000000008152506040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016102a5919061395d565b602060405180830381600087803b1580156102bf57600080fd5b505af11580156102d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506102f79190810190613454565b92508273ffffffffffffffffffffffffffffffffffffffff16635887ab246040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561035d57600080fd5b505af1158015610371573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610395919081019061342b565b91508173ffffffffffffffffffffffffffffffffffffffff16631a391cb4896040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016103ec9190613ba8565b600060405180830381600087803b15801561040657600080fd5b505af115801561041a573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb4886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016104739190613bfd565b600060405180830381600087803b15801561048d57600080fd5b505af11580156104a1573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb4876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016104fa91906139ff565b600060405180830381600087803b15801561051457600080fd5b505af1158015610528573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb4866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016105819190613aa9565b600060405180830381600087803b15801561059b57600080fd5b505af11580156105af573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff16634c6f30c089846040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161060a9291906139af565b602060405180830381600087803b15801561062457600080fd5b505af1158015610638573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061065c919081019061347d565b90507fdfc533ec2b52797a1229dc2495dbd3f4948f7c4c982ec077ad9d80810ec5c1f98160405161068d9190613942565b60405180910390a1809350505050949350505050565b6000806000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359a48b656040805190810160405280600c81526020017f6d6f64656c5f7265636f726400000000000000000000000000000000000000008152506040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610757919061395d565b602060405180830381600087803b15801561077157600080fd5b505af1158015610785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107a99190810190613454565b94508473ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561080f57600080fd5b505af1158015610823573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061084791908101906133d9565b93508473ffffffffffffffffffffffffffffffffffffffff1663d8ac59578b866040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016108a092919061397f565b602060405180830381600087803b1580156108ba57600080fd5b505af11580156108ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108f29190810190613402565b925060008373ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561095a57600080fd5b505af115801561096e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610992919081019061347d565b1415156109c1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9550610d61565b8473","ffffffffffffffffffffffffffffffffffffffff16635887ab246040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610a2557600080fd5b505af1158015610a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a5d919081019061342b565b91508173ffffffffffffffffffffffffffffffffffffffff16631a391cb48b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610ab49190613ba8565b600060405180830381600087803b158015610ace57600080fd5b505af1158015610ae2573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb48a6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610b3b9190613afe565b600060405180830381600087803b158015610b5557600080fd5b505af1158015610b69573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb4896040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610bc29190613c52565b600060405180830381600087803b158015610bdc57600080fd5b505af1158015610bf0573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb4886040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610c499190613a54565b600060405180830381600087803b158015610c6357600080fd5b505af1158015610c77573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff16634c6f30c08b846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610cd29291906139af565b602060405180830381600087803b158015610cec57600080fd5b505af1158015610d00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d24919081019061347d565b90507fdfc533ec2b52797a1229dc2495dbd3f4948f7c4c982ec077ad9d80810ec5c1f981604051610d559190613942565b60405180910390a18095505b5050505050949350505050565b60608060608060008060006060806060806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359a48b656040805190810160405280600f81526020017f6d6f64656c5f6d61696e5f696e666f00000000000000000000000000000000008152506040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610e2d919061395d565b602060405180830381600087803b158015610e4757600080fd5b505af1158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e7f9190810190613454565b98508873ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610ee557600080fd5b505af1158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f1d91908101906133d9565b97508873ffffffffffffffffffffffffffffffffffffffff1663d8ac59578f8a6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610f7692919061397f565b602060405180830381600087803b158015610f9057600080fd5b505af1158015610fa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fc89190810190613402565b96508673ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561102e57600080fd5b505af1158015611042573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611066919081019061347d565b60405190808252806020026020018201604052801561109957816020015b60608152602001906001900390816110845790505b5095508673ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561110057600080fd5b505af1158015611114573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611138919081019061347d565b60405190808252806020026020018201604052801561116b57816020015b60608152602001906001900390816111565790505b5094508673ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156111d257600080fd5b505af11580156111e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061120a919081019061347d565b60405190808252806020026020018201604052801561123d57816020015b60608152602001906001900390816112285790505b5093508673ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156112a457600080fd5b505af11580156112b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112dc919081019061347d565b60405190808252806020026020018201604052801561130f57816020015b60608152602001906001900390816112fa5790505b509250600091505b8673ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561137b57600080fd5b505af115801561138f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113b3919081019061347d565b821215611782578673ffffffffffffffffffffffffffffffffffffffff16633dd2b614836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161140f9190613942565b602060405180830381600087803b15801561142957600080fd5b505af115801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611461919081019061342b565b90508073ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016114b690613b88565b600060405180830381600087803b1580156114d057600080fd5b505af11580156114e4573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061150d91908101906134e7565b868381518110151561151b57fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161157b90613ade565b600060405180830381600087803b15801561159557600080fd5b505af11580156115a9573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506115d291908101906134e7565b85838151811015156115e057fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161164090613b33565b600060405180830381600087803b15801561165a57600080fd5b505af115801561166e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061169791908101906134e7565b84838151811015156116a557fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161170590613c87565b600060405180830381600087803b15801561171f57600080fd5b505af1158015611733573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061175c91908101906134e7565b838381518110151561176a57fe5b90602001906020020181905250816001019150611317565b858585859c509c509c509c505050505050505050509193509193565b6000806000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359a48b656040805190810160405280600f81526020017f6d6f64656c5f6d61696e5f696e666f00000000000000000000000000000000008152506040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611852919061395d565b602060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118a49190810190613454565b94508473ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561190a57600080fd5b505af115801561191e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061194291908101906133d9565b93508473ffffffffffffffffffffffffffffffffffffffff1663d8ac59578b866040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161199b92919061397f565b602060405180830381600087803b1580156119b557600080fd5b505af11580156119c9573d600080","3e3d6000fd5b505050506040513d601f19601f820116820180604052506119ed9190810190613402565b925060008373ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611a5557600080fd5b505af1158015611a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a8d919081019061347d565b141515611abc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9550611e5c565b8473ffffffffffffffffffffffffffffffffffffffff16635887ab246040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611b2057600080fd5b505af1158015611b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611b58919081019061342b565b91508173ffffffffffffffffffffffffffffffffffffffff16631a391cb48b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611baf9190613ba8565b600060405180830381600087803b158015611bc957600080fd5b505af1158015611bdd573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb48a6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611c369190613afe565b600060405180830381600087803b158015611c5057600080fd5b505af1158015611c64573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb4896040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611cbd9190613b53565b600060405180830381600087803b158015611cd757600080fd5b505af1158015611ceb573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb4886040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611d449190613ca7565b600060405180830381600087803b158015611d5e57600080fd5b505af1158015611d72573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff16634c6f30c08b846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611dcd9291906139af565b602060405180830381600087803b158015611de757600080fd5b505af1158015611dfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e1f919081019061347d565b90507fdfc533ec2b52797a1229dc2495dbd3f4948f7c4c982ec077ad9d80810ec5c1f981604051611e509190613942565b60405180910390a18095505b5050505050949350505050565b60608060608060008060006060806060806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359a48b656040805190810160405280600c81526020017f6d6f64656c5f7265636f726400000000000000000000000000000000000000008152506040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611f28919061395d565b602060405180830381600087803b158015611f4257600080fd5b505af1158015611f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611f7a9190810190613454565b98508873ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611fe057600080fd5b505af1158015611ff4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061201891908101906133d9565b97508873ffffffffffffffffffffffffffffffffffffffff1663d8ac59578f8a6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161207192919061397f565b602060405180830381600087803b15801561208b57600080fd5b505af115801561209f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120c39190810190613402565b96508673ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561212957600080fd5b505af115801561213d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612161919081019061347d565b60405190808252806020026020018201604052801561219457816020015b606081526020019060019003908161217f5790505b5095508673ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156121fb57600080fd5b505af115801561220f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612233919081019061347d565b60405190808252806020026020018201604052801561226657816020015b60608152602001906001900390816122515790505b5094508673ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156122cd57600080fd5b505af11580156122e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612305919081019061347d565b60405190808252806020026020018201604052801561233857816020015b60608152602001906001900390816123235790505b5093508673ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561239f57600080fd5b505af11580156123b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123d7919081019061347d565b60405190808252806020026020018201604052801561240a57816020015b60608152602001906001900390816123f55790505b509250600091505b8673ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561247657600080fd5b505af115801561248a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124ae919081019061347d565b82121561287d578673ffffffffffffffffffffffffffffffffffffffff16633dd2b614836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161250a9190613942565b602060405180830381600087803b15801561252457600080fd5b505af1158015612538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061255c919081019061342b565b90508073ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016125b190613b88565b600060405180830381600087803b1580156125cb57600080fd5b505af11580156125df573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061260891908101906134e7565b868381518110151561261657fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161267690613ade565b600060405180830381600087803b15801561269057600080fd5b505af11580156126a4573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506126cd91908101906134e7565b85838151811015156126db57fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161273b90613c32565b600060405180830381600087803b15801561275557600080fd5b505af1158015612769573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061279291908101906134e7565b84838151811015156127a057fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161280090613a34565b600060405180830381600087803b15801561281a57600080fd5b505af115801561282e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061285791908101906134e7565b838381518110151561286557fe5b90602001906020020181905250816001019150612412565b858585859c509c509c509c505050505050505050509193509193565b60608060608060008060006060806060806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359a48b656040805190810160405280600c81526020017f73746174655f6368616e676500000000000000000000000000000000000000008152506040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612958919061395d565b602060405180830381600087803b15801561297257600080fd5b505af1158015612986573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506129aa9190810190613454565b98508873ffffffffffffffffffffffffffffffffffffffff16","63c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612a1057600080fd5b505af1158015612a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a4891908101906133d9565b97508873ffffffffffffffffffffffffffffffffffffffff1663d8ac59578f8a6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612aa192919061397f565b602060405180830381600087803b158015612abb57600080fd5b505af1158015612acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612af39190810190613402565b96508673ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612b5957600080fd5b505af1158015612b6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b91919081019061347d565b604051908082528060200260200182016040528015612bc457816020015b6060815260200190600190039081612baf5790505b5095508673ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612c2b57600080fd5b505af1158015612c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c63919081019061347d565b604051908082528060200260200182016040528015612c9657816020015b6060815260200190600190039081612c815790505b5094508673ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612cfd57600080fd5b505af1158015612d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d35919081019061347d565b604051908082528060200260200182016040528015612d6857816020015b6060815260200190600190039081612d535790505b5093508673ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612dcf57600080fd5b505af1158015612de3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612e07919081019061347d565b604051908082528060200260200182016040528015612e3a57816020015b6060815260200190600190039081612e255790505b509250600091505b8673ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612ea657600080fd5b505af1158015612eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ede919081019061347d565b8212156132ad578673ffffffffffffffffffffffffffffffffffffffff16633dd2b614836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612f3a9190613942565b602060405180830381600087803b158015612f5457600080fd5b505af1158015612f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f8c919081019061342b565b90508073ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612fe190613b88565b600060405180830381600087803b158015612ffb57600080fd5b505af115801561300f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061303891908101906134e7565b868381518110151561304657fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016130a690613bdd565b600060405180830381600087803b1580156130c057600080fd5b505af11580156130d4573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506130fd91908101906134e7565b858381518110151561310b57fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161316b906139df565b600060405180830381600087803b15801561318557600080fd5b505af1158015613199573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506131c291908101906134e7565b84838151811015156131d057fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161323090613a89565b600060405180830381600087803b15801561324a57600080fd5b505af115801561325e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061328791908101906134e7565b838381518110151561329557fe5b90602001906020020181905250816001019150612e42565b858585859c509c509c509c505050505050505050509193509193565b60006132d58251613d9a565b905092915050565b60006132e98251613dac565b905092915050565b60006132fd8251613dbe565b905092915050565b60006133118251613dd0565b905092915050565b60006133258251613de2565b905092915050565b600082601f830112151561334057600080fd5b813561335361334e82613d09565b613cdc565b9150808252602083016020830185838301111561336f57600080fd5b61337a838284613e10565b50505092915050565b600082601f830112151561339657600080fd5b81516133a96133a482613d09565b613cdc565b915080825260208301602083018583830111156133c557600080fd5b6133d0838284613e1f565b50505092915050565b6000602082840312156133eb57600080fd5b60006133f9848285016132c9565b91505092915050565b60006020828403121561341457600080fd5b6000613422848285016132dd565b91505092915050565b60006020828403121561343d57600080fd5b600061344b848285016132f1565b91505092915050565b60006020828403121561346657600080fd5b600061347484828501613305565b91505092915050565b60006020828403121561348f57600080fd5b600061349d84828501613319565b91505092915050565b6000602082840312156134b857600080fd5b600082013567ffffffffffffffff8111156134d257600080fd5b6134de8482850161332d565b91505092915050565b6000602082840312156134f957600080fd5b600082015167ffffffffffffffff81111561351357600080fd5b61351f84828501613383565b91505092915050565b6000806000806080858703121561353e57600080fd5b600085013567ffffffffffffffff81111561355857600080fd5b6135648782880161332d565b945050602085013567ffffffffffffffff81111561358157600080fd5b61358d8782880161332d565b935050604085013567ffffffffffffffff8111156135aa57600080fd5b6135b68782880161332d565b925050606085013567ffffffffffffffff8111156135d357600080fd5b6135df8782880161332d565b91505092959194509250565b60006135f682613d42565b8084526020840193508360208202850161360f85613d35565b60005b8481101561364857838303885261362a8383516136bc565b925061363582613d63565b9150602088019750600181019050613612565b508196508694505050505092915050565b61366281613dec565b82525050565b61367181613dfe565b82525050565b61368081613d90565b82525050565b600061369182613d58565b8084526136a5816020860160208601613e1f565b6136ae81613e52565b602085010191505092915050565b60006136c782613d4d565b8084526136db816020860160208601613e1f565b6136e481613e52565b602085010191505092915050565b6000600b82527f6368616e67655f747970650000000000000000000000000000000000000000006020830152604082019050919050565b6000600b82527f76657269667965725f69640000000000000000000000000000000000000000006020830152604082019050919050565b6000600882527f6f70657261746f720000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600b82527f70726f64756365725f69640000000000000000000000000000000000000000006020830152604082019050919050565b6000600e82527f6d6f64656c5f63617465676f72790000000000000000000000000000000000006020830152604082019050919050565b6000600882527f6d6f64656c5f69640000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600482527f74696d65000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600b82527f63657274696665725f69640000000000000000000000000000000000000000006020830152604082019050919050565b6000600482527f6e6f7465000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600060808201905081810360008301526138fb81876135eb565b9050818103602083015261390f81866135eb565b9050818103604083015261392381856135eb565b9050818103606083015261393781846135eb565b905095945050505050565b60006020820190506139576000830184613677565b92915050565b6000602082019050818103600083015261397781846136bc565b905092915050565b600060408201905081810360008301526139998185613686565b90506139a86020830184613659565b9392505050565b600060408201905081810360008301526139c981","85613686565b90506139d86020830184613668565b9392505050565b600060208201905081810360008301526139f8816136f2565b9050919050565b60006040820190508181036000830152613a18816136f2565b90508181036020830152613a2c8184613686565b905092915050565b60006020820190508181036000830152613a4d81613729565b9050919050565b60006040820190508181036000830152613a6d81613729565b90508181036020830152613a818184613686565b905092915050565b60006020820190508181036000830152613aa281613760565b9050919050565b60006040820190508181036000830152613ac281613760565b90508181036020830152613ad68184613686565b905092915050565b60006020820190508181036000830152613af781613797565b9050919050565b60006040820190508181036000830152613b1781613797565b90508181036020830152613b2b8184613686565b905092915050565b60006020820190508181036000830152613b4c816137ce565b9050919050565b60006040820190508181036000830152613b6c816137ce565b90508181036020830152613b808184613686565b905092915050565b60006020820190508181036000830152613ba181613805565b9050919050565b60006040820190508181036000830152613bc181613805565b90508181036020830152613bd58184613686565b905092915050565b60006020820190508181036000830152613bf68161383c565b9050919050565b60006040820190508181036000830152613c168161383c565b90508181036020830152613c2a8184613686565b905092915050565b60006020820190508181036000830152613c4b81613873565b9050919050565b60006040820190508181036000830152613c6b81613873565b90508181036020830152613c7f8184613686565b905092915050565b60006020820190508181036000830152613ca0816138aa565b9050919050565b60006040820190508181036000830152613cc0816138aa565b90508181036020830152613cd48184613686565b905092915050565b6000604051905081810181811067ffffffffffffffff82111715613cff57600080fd5b8060405250919050565b600067ffffffffffffffff821115613d2057600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613da582613d70565b9050919050565b6000613db782613d70565b9050919050565b6000613dc982613d70565b9050919050565b6000613ddb82613d70565b9050919050565b6000819050919050565b6000613df782613d70565b9050919050565b6000613e0982613d70565b9050919050565b82818337600083830152505050565b60005b83811015613e3d578082015181840152602081019050613e22565b83811115613e4c576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a723058205ceeaddb072f35425734fbf561009530697bd00e13d98b766843cf363a27dfa46c6578706572696d656e74616cf50037"};

    public static final String SM_BINARY = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", SM_BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {"[{\"constant\":false,\"inputs\":[{\"name\":\"model_id\",\"type\":\"string\"},{\"name\":\"producer_id\",\"type\":\"string\"},{\"name\":\"certifer_id\",\"type\":\"string\"},{\"name\":\"verifyer_id\",\"type\":\"string\"}],\"name\":\"inster_model_record\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"model_id\",\"type\":\"string\"}],\"name\":\"query_state_change\",\"outputs\":[{\"name\":\"\",\"type\":\"string[]\"},{\"name\":\"\",\"type\":\"string[]\"},{\"name\":\"\",\"type\":\"string[]\"},{\"name\":\"\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"model_id\",\"type\":\"string\"},{\"name\":\"time\",\"type\":\"string\"},{\"name\":\"change_type\",\"type\":\"string\"},{\"name\":\"operator\",\"type\":\"string\"}],\"name\":\"inster_state_change\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"model_id\",\"type\":\"string\"}],\"name\":\"query_model_record\",\"outputs\":[{\"name\":\"\",\"type\":\"string[]\"},{\"name\":\"\",\"type\":\"string[]\"},{\"name\":\"\",\"type\":\"string[]\"},{\"name\":\"\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"model_id\",\"type\":\"string\"},{\"name\":\"producer_id\",\"type\":\"string\"},{\"name\":\"model_category\",\"type\":\"string\"},{\"name\":\"note\",\"type\":\"string\"}],\"name\":\"inster_model_info\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"model_id\",\"type\":\"string\"}],\"name\":\"query_model_info\",\"outputs\":[{\"name\":\"\",\"type\":\"string[]\"},{\"name\":\"\",\"type\":\"string[]\"},{\"name\":\"\",\"type\":\"string[]\"},{\"name\":\"\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"count\",\"type\":\"int256\"}],\"name\":\"InsertResult\",\"type\":\"event\"}]"};

    public static final String ABI = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", ABI_ARRAY);

    public static final String FUNC_INSTER_MODEL_RECORD = "inster_model_record";

    public static final String FUNC_QUERY_STATE_CHANGE = "query_state_change";

    public static final String FUNC_INSTER_STATE_CHANGE = "inster_state_change";

    public static final String FUNC_QUERY_MODEL_RECORD = "query_model_record";

    public static final String FUNC_INSTER_MODEL_INFO = "inster_model_info";

    public static final String FUNC_QUERY_MODEL_INFO = "query_model_info";

    public static final Event INSERTRESULT_EVENT = new Event("InsertResult", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));
    ;

    public Data_upload(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    // inster_model_record函数，模型记录上链
    public TransactionReceipt inster_model_record(String model_id, String producer_id, String certifer_id, String verifyer_id) {
        final Function function = new Function(
                FUNC_INSTER_MODEL_RECORD, 
                Arrays.<Type>asList(new Utf8String(model_id),
                new Utf8String(producer_id),
                new Utf8String(certifer_id),
                new Utf8String(verifyer_id)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    //query_model_info函数，查询模型信息
    public Tuple4<List<String>, List<String>, List<String>, List<String>> query_model_info(String model_id) throws ContractException {
        final Function function = new Function(FUNC_QUERY_MODEL_INFO,
                Arrays.<Type>asList(new Utf8String(model_id)),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple4<List<String>, List<String>, List<String>, List<String>>(
                convertToNative((List<Utf8String>) results.get(0).getValue()),
                convertToNative((List<Utf8String>) results.get(1).getValue()),
                convertToNative((List<Utf8String>) results.get(2).getValue()),
                convertToNative((List<Utf8String>) results.get(3).getValue()));
    }

    // query_state_change函数，查询状态变更
    public Tuple4<List<String>, List<String>, List<String>, List<String>> query_state_change(String model_id) throws ContractException {
        final Function function = new Function(FUNC_QUERY_STATE_CHANGE,
                Arrays.<Type>asList(new Utf8String(model_id)),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple4<List<String>, List<String>, List<String>, List<String>>(
                convertToNative((List<Utf8String>) results.get(0).getValue()),
                convertToNative((List<Utf8String>) results.get(1).getValue()),
                convertToNative((List<Utf8String>) results.get(2).getValue()),
                convertToNative((List<Utf8String>) results.get(3).getValue()));
    }

    // inster_state_change函数，状态变更信息上链
    public TransactionReceipt inster_state_change(String model_id, String time, String change_type, String operator) {
        final Function function = new Function(
                FUNC_INSTER_STATE_CHANGE,
                Arrays.<Type>asList(new Utf8String(model_id),
                        new Utf8String(time),
                        new Utf8String(change_type),
                        new Utf8String(operator)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    // query_model_record函数，查询模型记录
    public Tuple4<List<String>, List<String>, List<String>, List<String>> query_model_record(String model_id) throws ContractException {
        final Function function = new Function(FUNC_QUERY_MODEL_RECORD,
                Arrays.<Type>asList(new Utf8String(model_id)),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple4<List<String>, List<String>, List<String>, List<String>>(
                convertToNative((List<Utf8String>) results.get(0).getValue()),
                convertToNative((List<Utf8String>) results.get(1).getValue()),
                convertToNative((List<Utf8String>) results.get(2).getValue()),
                convertToNative((List<Utf8String>) results.get(3).getValue()));
    }

    // inster_model_info函数, 模型信息上链
    public TransactionReceipt inster_model_info(String model_id, String producer_id, String model_category, String note) {
        final Function function = new Function(
                FUNC_INSTER_MODEL_INFO,
                Arrays.<Type>asList(new Utf8String(model_id),
                        new Utf8String(producer_id),
                        new Utf8String(model_category),
                        new Utf8String(note)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    /*
    * 以下函数为自动生成
    * */
    public byte[] inster_model_record(String model_id, String producer_id, String certifer_id, String verifyer_id, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_INSTER_MODEL_RECORD, 
                Arrays.<Type>asList(new Utf8String(model_id),
                new Utf8String(producer_id),
                new Utf8String(certifer_id),
                new Utf8String(verifyer_id)),
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForInster_model_record(String model_id, String producer_id, String certifer_id, String verifyer_id) {
        final Function function = new Function(
                FUNC_INSTER_MODEL_RECORD, 
                Arrays.<Type>asList(new Utf8String(model_id),
                new Utf8String(producer_id),
                new Utf8String(certifer_id),
                new Utf8String(verifyer_id)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple4<String, String, String, String> getInster_model_recordInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_INSTER_MODEL_RECORD, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple4<String, String, String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue(), 
                (String) results.get(3).getValue()
                );
    }

    public Tuple1<BigInteger> getInster_model_recordOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_INSTER_MODEL_RECORD, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public byte[] inster_state_change(String model_id, String time, String change_type, String operator, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_INSTER_STATE_CHANGE, 
                Arrays.<Type>asList(new Utf8String(model_id),
                new Utf8String(time),
                new Utf8String(change_type),
                new Utf8String(operator)),
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForInster_state_change(String model_id, String time, String change_type, String operator) {
        final Function function = new Function(
                FUNC_INSTER_STATE_CHANGE, 
                Arrays.<Type>asList(new Utf8String(model_id),
                new Utf8String(time),
                new Utf8String(change_type),
                new Utf8String(operator)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple4<String, String, String, String> getInster_state_changeInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_INSTER_STATE_CHANGE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple4<String, String, String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue(), 
                (String) results.get(3).getValue()
                );
    }

    public Tuple1<BigInteger> getInster_state_changeOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_INSTER_STATE_CHANGE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public byte[] inster_model_info(String model_id, String producer_id, String model_category, String note, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_INSTER_MODEL_INFO, 
                Arrays.<Type>asList(new Utf8String(model_id),
                new Utf8String(producer_id),
                new Utf8String(model_category),
                new Utf8String(note)),
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForInster_model_info(String model_id, String producer_id, String model_category, String note) {
        final Function function = new Function(
                FUNC_INSTER_MODEL_INFO, 
                Arrays.<Type>asList(new Utf8String(model_id),
                new Utf8String(producer_id),
                new Utf8String(model_category),
                new Utf8String(note)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple4<String, String, String, String> getInster_model_infoInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_INSTER_MODEL_INFO, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple4<String, String, String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue(), 
                (String) results.get(3).getValue()
                );
    }

    public Tuple1<BigInteger> getInster_model_infoOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_INSTER_MODEL_INFO, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public List<InsertResultEventResponse> getInsertResultEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(INSERTRESULT_EVENT, transactionReceipt);
        ArrayList<InsertResultEventResponse> responses = new ArrayList<InsertResultEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            InsertResultEventResponse typedResponse = new InsertResultEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.count = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeInsertResultEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(INSERTRESULT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeInsertResultEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(INSERTRESULT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    //加载合约地址，生成合约对象
    public static Data_upload load(String contractAddress, Client client, CryptoKeyPair credential) {
        return new Data_upload(contractAddress, client, credential);
    }

    //部署合约，生成合约对象
    public static Data_upload deploy(Client client, CryptoKeyPair credential) throws ContractException {
        return deploy(Data_upload.class, client, credential, getBinary(client.getCryptoSuite()), "");
    }

    public static class InsertResultEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger count;
    }
}
